﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FrameworkLib.Facades;
using FrameworkLib.Repository;
using GestionePolveriLib.BL;
using GestionePolveri2.DAL;

namespace GestionePolveriLib.Facades
{
    public class StoricoOperazioniFacade : FacadeBase<GestionePolveriEntities>, IFacadeBase<OperazioneItem>
    {
        GestionePolveriEntities context = null;

        public StoricoOperazioniFacade()
        {
            context = this.GetContext();
        }

        public StoricoOperazioniFacade(string connectionString)
        {
            context = this.GetContext(connectionString);
        }

        public OperazioneItem Get()
        {
            throw new NotImplementedException();
        }

        public bool Add(OperazioneItem value)
        {
            bool retValue = false;

            try
            {
                StoricoOperazioni obj = new StoricoOperazioni();
                obj.IDOperatore = value.IDOperatore;
                obj.IDPolvere = value.IDPolvere;
                obj.IDOperazione = (int)value.Tipo;
                obj.Note = value.Note;

                context.StoricoOperazioni.AddObject(obj);
                context.SaveChanges();

                value.ID = obj.IDStoricoOperazioni;

                retValue = true;
            }
            catch (Exception ex)
            {
                this.LastExceptionOccurred = ex;
                throw ex;
            }

            return retValue;
        }

        public bool Modify(OperazioneItem value)
        {
            bool retValue = false;

            try
            {
                var objs = from x in context.StoricoOperazioni
                          where x.IDStoricoOperazioni == value.ID
                          select x;

                if (objs.Any())
                {
                    StoricoOperazioni obj = objs.FirstOrDefault();
                    obj.IDOperatore = value.IDOperatore;
                    obj.IDPolvere = value.IDPolvere;
                    obj.IDOperazione = (int)value.Tipo;
                    obj.Note = value.Note;

                    context.SaveChanges();

                    retValue = true;
                }

               
            }
            catch (Exception ex)
            {
                this.LastExceptionOccurred = ex;
                throw ex;
            }

            return retValue;
        }

        public bool AddOrModify(OperazioneItem value)
        {
            bool retValue = false;

            try
            {
                var obj = from x in context.StoricoOperazioni
                          where x.IDStoricoOperazioni == value.ID
                          select x;

                if (obj.Any())
                {
                    Add(value);
                }
                else
                {
                    Modify(value);
                }

                retValue = true;
            }
            catch (Exception ex)
            {
                this.LastExceptionOccurred = ex;
                throw ex;
            }

            return retValue;
        }

        public bool Delete(OperazioneItem value)
        {
            bool retValue = false;

            try
            {
                var objs = from x in context.StoricoOperazioni
                           where x.IDStoricoOperazioni == value.ID
                           select x;

                if (objs.Any())
                {
                    //using (RepositoryBase<GestionePolveriEntities> rep = this.Repository)
                    //{
                    //    rep.Delete<StoricoOperazioni>(objs.FirstOrDefault());
                    //}

                    StoricoOperazioni obj = objs.FirstOrDefault();
                    context.StoricoOperazioni.DeleteObject(obj);
                    context.SaveChanges();

                    retValue = true;
                }
            }
            catch (Exception ex)
            {
                this.LastExceptionOccurred = ex;
                throw ex;
            }

            return retValue;
        }


    }
}
